package com.easychat.service;

import java.io.IOException;
import java.util.List;

import com.easychat.entity.dto.TokenUserInfoDTO;
import com.easychat.entity.enums.MessageTypeEnum;
import com.easychat.entity.query.GroupInfoQuery;
import com.easychat.entity.po.GroupInfo;
import com.easychat.entity.vo.PaginationResultVO;
import org.springframework.web.multipart.MultipartFile;


/**
 * 群组信息 业务接口
 */
public interface GroupInfoService {

	/**
	 * 根据条件查询列表
	 */
	List<GroupInfo> findListByParam(GroupInfoQuery param);

	/**
	 * 根据条件查询列表
	 */
	Integer findCountByParam(GroupInfoQuery param);

	/**
	 * 分页查询
	 */
	PaginationResultVO<GroupInfo> findListByPage(GroupInfoQuery param);

	/**
	 * 新增
	 */
	Integer add(GroupInfo bean);

	/**
	 * 批量新增
	 */
	Integer addBatch(List<GroupInfo> listBean);

	/**
	 * 批量新增/修改
	 */
	Integer addOrUpdateBatch(List<GroupInfo> listBean);

	/**
	 * 多条件更新
	 */
	Integer updateByParam(GroupInfo bean,GroupInfoQuery param);

	/**
	 * 多条件删除
	 */
	Integer deleteByParam(GroupInfoQuery param);

	/**
	 * 根据GroupId查询对象
	 */
	GroupInfo getGroupInfoByGroupId(String groupId);


	/**
	 * 根据GroupId修改
	 */
	Integer updateGroupInfoByGroupId(GroupInfo bean,String groupId);


	/**
	 * 根据GroupId删除
	 */
	Integer deleteGroupInfoByGroupId(String groupId);

	/**
	 * 创建群组
	 * @param groupInfo 群组信息对象
	 * @param avatarFile 头像文件
	 * @param avatarCover 头像封面，缩略图
	 */
    void saveGroup(GroupInfo groupInfo, MultipartFile avatarFile, MultipartFile avatarCover) throws IOException;

	/**
	 * 解散群组
	 * @param groupOwnerId
	 * @param groupId
	 */
	void dissolutionGroup(String groupOwnerId, String groupId);

	/**
	 * 添加用户到群聊/移除群聊中的用户
	 * @param tokenUserInfoDTO 操作者token(必须为群主)
	 * @param groupId 群id
	 * @param selectContacts 选择的联系人id
	 * @param opType 操作类型 0移除 1添加
	 * @return
	 */
    void addOrRemoveGroupUser(TokenUserInfoDTO tokenUserInfoDTO, String groupId, String selectContacts, Integer opType);

	/**
	 * 离开群聊
	 * @param userId 离开群聊的用户
	 * @param groupId 群id
	 * @param messageTypeEnum 消息类型  LEAVE_GROUP %s退出了群聊 REMOVE_GROUP %s被管理员移除了群聊
	 */
	void leaveGroup(String userId, String groupId, MessageTypeEnum messageTypeEnum);
}